#include <vector>
#include <list>
#include <map>
#include <set>
#include <deque>
#include <queue>
#include <stack>
#include <bitset>
#include <algorithm>
#include <functional>
#include <numeric>
#include <utility>
#include <sstream>
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <cctype>
#include <string>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <ctime>

using namespace std;

#define REP(i, n) for(int i=0;i<int(n);i++)
#define PB push_back
#define MP(X,Y) make_pair(X,Y)
#define SZ(X) ((int)(X.size()))
typedef  long long   ll;
#define EPS 1e-10

int main() {
  int i,j ,k;
  long double y1, y2, yw, xb, yb, r;
  cin >> y1 >> y2 >> yw >> xb >> yb >> r;
  y2 = y2;
  y1 = y1 + r;
  yw = yw - r;
  long double b = y1, e = y2;
  int pasos = 10000;
  long double pointy = y1;
  yb = (yw-yb)+yw;
  while (pasos-- && e-b > 1e-10) {
    y1 = (e+b)/2.; 
    long double dx1 = 0, dx2 = xb - 0;
    long double dy1 = y2 - y1, dy2 = yb - y1;
    long double cruz = fabs(dx1 * dy2 - dx2 * dy1)/2.;
    long double dist = sqrt(dy2*dy2 + dx2*dx2);
    cruz /= dist;
    cruz *= 2.;
    if (y1 >= y2 or cruz < r+EPS) e = y1;
    else b = y1;
  }


  if (b-pointy < 1e-9) printf("%d\n", -1);
  else {
    y1 = (b+pointy)/2.;
    long double xres = (xb * (yw-y1))/(yb-y1);
    printf("%.15lf\n", (double)xres);
  }
  return 0;
}


